home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
UTIL
/
DISKUTIL
/
FSCK
/
fsck_help
< prev
next >
Wrap
Text File
|
1995-06-11
|
20KB
|
420 lines
fsck (1.22) - map fixer and analyst
NOTE: this program is SHAREWARE. Read the !SHAREWARE file for more info.
fsck is a disc utility that fixes the map of an E-Format disc (hard or
floppy) if it is corrupted for some obscure reasons. fsck can also report
some informations about the way the files are allocated (such as the bytes
lost because of sectors boundaries) and eventually print a detailed
description of the map and directories organization.
fsck can also be considered as a replace of the *CheckMap command because it
is faster, less prone to crash and can give useful informations on the files
allocation.
Usage
-----
fsck [-options] [-d lostdir] [-l logfile] [pathname]
Most used options:
-s calculate statistics
-f try to fix map if broken
-l print the results in "logfile"
Less used options:
-h print help informations
-d link broken part of map in directory "lostdir"
-v print files location (-vv print also files position in zones)
-D just display disc information recorded in the map header
-q don't display disc information (quiet mode)
-c produce output like *CheckMap
-m ask the user to eventually move files instead of changing map
-n don't try to recognise directories
The default directory where files are linked is "$.lost+found".
If 'pathname' is not specified, the current disc is analysed.
If 'pathname' is not a root directory (eg. ADFS::0.$.Library), fsck checks
only that directory and so it cannot tell you if the map is good or broken.
This could be useful if you want to know the statistics of a single directory
instead of the whole disc. If the -f option is used, the disc is scanned from
the root directory, regardless of 'pathname'.
The -m and -n options used together cause fsck 1.20 or later to work like
fsck 1.13 or earlier.
What it does (or tries to do...)
--------------------------------
fsck scans the directory tree and checks the map to see if every file
registered in the map actually exists in a directory. If not, it creates that
file in a directory so that you will be able to delete it in the normal way.
If the file was originally a directory, fsck tries to relink it
reconstructing the directory name and content. Even if you want to keep the
relinked files or directories, you should copy them and delete the original
one, because there is the risk that your map will be corrupted again,
especially if you try to change them.
Apart from directories and their content, the re-linked files are usually
longer than the original lost file because fsck always links whole sectors
(and there is no way to know the original length), their filenames are random
and filetypes always &FFF (Text).
Using the -m option, fsck could tell you that an ID is regularly allocated
for another file and you have to delete it (moving the file to another
directory isn't enough, you have to copy it and delete the original) and run
fsck again. Without this option, fsck will change the ID in the map and
rewrite it to disc. The -m option is in fact only useful if you prefer not to
modify your map: anyway, remember that moving files on a corrupted disc can
be quite dangerous and can eventually corrupt other parts of the disc.
Sometimes the disc may be so corrupted that you will need to run fsck more
than once, the program itself will tell you if a re-run is needed.
The logfile
-----------
Using the logfile (-l) option is generally really useful: if something
strange happens, the author will be more helpful if he can see exactly what
happened and you don't even have to try to explain what happened when you run
fsck, the logfile is usually enough!
The logfile contains exactly what it is printed to the screen: unless you use
the -v option it will be really small (nearly 2K on a good map or nearly 10K
on a quite corrupted one).
You cannot save the logfile to the disc to analyse.
If a file with the same name of the logfile already exists, the new data will
be attached at the end of it: in this way, you can attach together two or
more logfiles.
fsck and Risc PC
----------------
fsck and CheckMap are no more equivalent on Risc PCs! In fact, Acorn changed
some behaviours of the FileCore module in RISC OS 3.50 so that it can now
cope with over-allocated files (ie. files that have allocated more space than
they need). This sort of files on old version of RISC OS causes CheckMap to
say "Map inconsistent" and if you try to delete such files you will lose some
space. On RISC OS 3.50 CheckMap no more says "Map inconsistent" if
over-allocated files are the only map problem and deleting them no more
causes lost space. Compliment Acorn!
fsck still reports map corruptions in this case (on every version of RISC OS)
since an over-allocated file can be considered a problem (think at a 100K
file that uses up 10Mb of disc space and you will understand what I mean!).
Anyway, on a Risc PC, using the -m option you can be able to discover such
files and you can fix the disc (assuming that your map is corrupted only
because of over-allocated files) just moving them.
Remember that using the -f option fsck can cure the disc without moving any
file on every version of RISC OS.
Return values
-------------
This paragraph can be interesting only for programmers who want to write
some program/frontend that has to interface with fsck.
fsck returns to RISC OS a value that is 0 only if fsck was able to scan the
disc and the map is good, otherwise it returns 1.
fsck also sets the numeric system variable fsck$ReturnCode to a value that
can be more helpful to determine why fsck failed or 0 if the map was good.
The value is formed by the following bits:
enum {
return_MAPGOOD = 0x00000000, /* the map is good (!) */
return_MAP_BROKEN = 0x00000001, /* the map is broken, fsck -f should fix it */
return_MAP_FIXED = 0x00000002, /* the map was broken but has been fixed */
return_MAP_UNFIXABLE = 0x00000004, /* the map seems to be unfixable... */
return_NEED_ELIMINATE = 0x00000010, /* need eliminate to fix the map */
return_NEED_HARDFIX = 0x00000020, /* need hardfix to fix the map */
return_NO_ACTION = 0x00000100, /* no useful action performed (eg. fsck -h) */
return_PARAM_ERROR = 0x00000200, /* bad input parameters */
return_WRONG_FS = 0x00000400, /* wrong file system name, disc name, number, etc. */
return_IO_ERROR = 0x00000800, /* error while reading/writing disc, directories, etc. */
return_MEMORY_FULL = 0x00001000 /* not enough free memory */
};
You can expect that every possible conbination of that values is returned (ie.
&30 means that both 'eliminate' and 'hardfix' are needed) even if generally
only one error number is returned.
If you are writing a 'C' program that has to call fsck you can use something
like this:
if (system("fsck ...")==0) {
/* map good */
}
else {
/* some problem occurred (not necessairily map broken!) */
/* check fsck$ReturnCode for more informations */
}
If you don't want (or can't) check the return status you just check the value
of fsck$ReturnCode.
Notes
-----
fsck is 20-30% faster than CheckMap (actually, up to 50% faster on big and
full drives!). If you really like CheckMap's output instead of fsck's one,
you can use the -c option so that fsck will print the directory tree as it
proceeds with the scan. You can eventually include the following alias in
your boot sequence so that you can still write 'CheckMap' even if 'fsck' is
the command actually executed (fsck should be reachable via Run$Path, for
example, put it in the Library directory):
Set Alias$CheckMap "fsck -c " [try "fsck -s " for a more useful output]
Anyway, fsck can also be used to show the "Free space chunks
statistics" or to calculate some statistics about the files allocation using
the -s option (not in conjunction with -c, though).
The "Free space chunks statistics" are always shown unless the -q or -c
options have been specified: in general, with a high number of (small) free
space chunks, RISC OS will be slower when saving files because it will try to
do an auto-Compact and (this is my personal opinion) there will be more
possibility for your disc to become corrupted. So, I think that in this case
you need to Compact your disc, eventually more than once, to try to lower the
number of free space chunks and to increase their size.
Remember that it is better if you close all the open files on the disc that
fsck is examining (ie. don't *spool on it!!). If you run fsck in a TaskWindow
remember to avoid any save of data on that disc while fsck is running because
this will have VERY VERY DANGEROUS consequences if you use the -f option!!!
If some file is corrupted, fsck will tell you to eliminate it before trying
to fix the disc (if you were already trying to fix the disc the fixing will be
disabled): before this, try to load the file and if RISC OS doesn't hang you
could be able to save the file somewhere before deleting the original.
Disclaimer
----------
Even if fsck *can* write to the map, this is generally not dangerous since it
only modifies the IDs of the lost files. Anyway, you are adviced to use
hardfix to save the disc data before using fsck, so that you will be able to
restore it in case something goes wrong. If the relinked files are (for some
mysterious reason) unreadable or undeletable you should just use eliminate on
them and your disc should be as corrupted as before.
Anyway, modifying the disc map and the directory tree can always be
dangerous: if fsck corrupts your disc (or if the disc becomes corrupted when
you start writing to it after using fsck), I am sorry for you but I AM NOT
RESPONSIBLE for any loss of data on your discs, so use fsck at your own risk.
As you can see from the list below, fsck worked on many discs and it never
corrupted anything. Sometimes, I intentionally corrupt my disc to see if the
new versions work and never experienced any problem!
Finally, remember that unless you specify the -f option, fsck will not write
to your disc and you are encouraged to make a backup copy of your important
data and to save the disc data using hardfix before running fsck -f.
Limitations
-----------
fsck can't fix seriously damaged discs alone: in this case it will ask you to
run eliminate or hardfix to fix what it can't.
Bugs
----
Sometimes, on heavily damaged disc, you need to run fsck more than once even
if it doesn't tell you to do so.
fsck could have problems with RISCiX partitioned discs: it works with the
only RISCiX partitioned disc I tried it on, but I cannot be sure it will work
on yours, too. If you have such a disc and fsck reports strange errors (or
says to run hardfix to fix it) please mail me the logfile and (more important)
the disc data saved by hardfix.
Results achieved up to now
--------------------------
If you run fsck on your corrupted HD, please let me know! If it wasn't able
to fix it, I'll try to modify it to cope with your problem. If you want to
stay anonymous tell me not to include your name!
Positive results:
1) some 800K ADFS floppy (used during development).
2) 100Mb IDE (ICS interface) partitioned in 84Mb/16Mb (both partitions
fixed). Owner: Sergio Monesi (ie. me!)
3) 100Mb IDE (ICS interface). Owner: Cristian Ghezzi
4) 314Mb SCSI (Serial Port Alpha SCSI interface). Owner: K. Bailey
5) 60Mb IDE (A4 portable). Owner: G. Castagno
6) 48Mb SCSI (Oak 16 Bit interface). Owner: A.M. Baardholt
7) 40Mb ST506. Owner: A. Goodfellow
8) 80Mb IDE (A5000). Owner: Julian Wright
9) 240Mb SCSI (HCCS 8 bit interface) partitioned in 2*120Mb. Owner: Kai
Schlichting.
10) 245Mb IDE (A5000). Owner: H. M.
11) 80Mb IDE (A5000). Owner: Mike Henry
12) 121Mb SCSI (Lingenuity SCSI interface). Owner: R. Z.
13) 100Mb SCSI (Oak interface). Owner: JP Hendrix
14) 60Mb IDE (A4 portable). Owner: J. Wallace
15) 122Mb SCSI (Atomwide Parallel/SCSI interface). Owner: J. Wallace
16) 80Mb IDE (A5000). Owner: P. Callan
17) 240Mb SCSI (Morley Cached interface). Owner: P. Callan
18) 80Mb SCSI (Morley Cached interface). Owner: P. Callan
19) Some 45Mb Syquest Removable cartridges. Owner: P. Callan (this poor dude
has a lot of discs, all of them were broken, now successfully fixed!!)
20) 40Mb ST506. Owner: G. Riley
21) 40Mb IDE (Serial Port interface). Owner: G. Riley
22) 40Mb ST506. Owner: M. Ferrari
23) 240Mb IDE (A5000). Owner: E. Pfarr
24) 200Mb SCSI. Owner: S. Williams
25) 500Mb SCSI. Owner: S. Williams
26) 314Mb SCSI (Morley interface). Owner: Cy Booker
27) 60Mb IDE (A4 portable). Owner: M. Stephens
28) 105Mb SCSI (HCCS 8 bit interface). Owner. S. Huber
29) 20Mb IDE (Watford interface). Owner: S. Pollard
30) 57Mb SCSI (Lingenuity interface). Owner: M. Grimminck
31) 170Mb IDE (A5000). Owner: M. Ebourne
32) 40Mb ST506. Owner: M. Attenborough
33) 120Mb IDE (ICS interface). Owner: J. Haslam
34) 170Mb SCSI (Oak 16 Bit interface). Owner: P. Spencer
35) 116Mb IDE (Desktop Projects interface). Owner: A.D. Hodgkinson
36) 420Mb IDE (A5000). Owner: E. Pronk
37) 210Mb IDE (Risc PC). Owner: E. Hughes
38) 105Mb IDE (ICS interface). Owner: C. Whitehead
39) 200Mb SCSI (Acorn Interface). Owner: A. Malara
40) 120Mb IDE (A5000). Owner: B. Bommer
41) 105Mb IDE Syquest Removable cartridge (A5000). Owner: B. Bommer
42) 52Mb SCSI (Lingenuity interface). Owner: Kjetil Bernhard Thomassen
43) 122Mb SCSI (Lingenuity interface). Owner: P. Gillham
44) 120Mb SCSI (A540). Owner: D.A. Crossley
45) 48Mb SCSI (Oak 16 Bit interface). Owner: R. McMinn
46) 32Mb SCSI (Lingenuity interface). Owner: P. Chambers
47) 210Mb IDE (Risc PC). Owner: C. McEvoy
48) 80Mb IDE (Evolution 16 Bit). Owner: E. Furtner
Probably many other discs have been fixed but their owner didn't contacted
me...
Negative results:
No negative results till now.
History
-------
1.00 First fully working version. Released only via e-mail.
1.01 Fixed a bug concerning filing system names. Added -D option. Now fsck
generally needs only one run to fix a heavily corrupted disc. Added
eliminate program.
1.02 Changed again the method to check filing system names (Thanks to
Keith Bailey). Added percentages in statistics. Checks boot block
checksum and shows defect list.
1.03 Now it is possible to scan a single directory instead of the whole
disc. You can specify 'relative' pathnames (eg. @.Examples) instead
of full paths (Thanks to Julian Wright). At the end of the scan fsck
will tell you which files should be eventually deleted. Added
statistics about fragmented files and free blocks sizes. Changed the
'F's and 'D's with a rotating wheel... Added -q and -l options.
1.04 Cured a serious bug that has always been present but never caused
problems (until 1.03). Added ImageFSFix check and -I option. Now fsck
understands RISCiX partitions.
1.10 RISCiX partitions are now fully supported (ie. mapped out). First
version distributed as SHAREWARE.
1.11 Added -a option. The logfile is appended to the end of the file if it
already exists and now it contains the creation date. Great speed
increase (up to 2 times faster without -s and 5 times faster with
-s!!!). Now fsck is just 25% slower than *CheckMap (or 2 times slower
with -s)! Added the note about "Free space chunks statistics" (see
the section Notes).
1.12 Another speed improvement (just 10%)! fsck isn't yet as fast as
*CheckMap but I'm working on it ;-) Fixed a possible dangerous
behaviour of -a option. Added a warning for HD boot blocks marked as
defect. Slowed down the wheel. Added files MapExpl and StatsHelp.
1.13 Faster again (15% with -s, 3% without)!! Now statistics are just a bit
slower than normal mode. Automatic creation of lostdir. More messages
at the end of the process that can help to understand what happened
(ie. the disc is fixed, fixable, unfixable, etc.) and more helpful
error messages (no more "Can't find 'AD::0.$': incorrect FS") if the
floppy drive is empty!
1.20 Completely rewritten! As you would expect: *FASTER* (this is
probably the maximum achievable speed with the structure of fsck, so
don't expect further significant improvements!). Now fsck is 20-30%
faster than *CheckMap, even with statistics enabled! Directory
recognition added (see the "What it does" secton). No more files to
move (so many people complained about this)! Added -m and -n options
to 'simulate' 1.13 version. Added -c option to simulate CheckMap (!).
Removed the obsolescent -a option. Fixed problems with ImageFSFix
module and removed -I option. If some file has allocation problems,
the name of the file is reported together with the error, so that you
can use 'eliminate' to remove it. Fixed a lot of bugs, some more
sensible messages and more consistent way to print some value. Added
new statistics about files that must be fragmented. Modified command
line behaviour: if no 'pathname' is given, fsck scans the current
disc (as CheckMap does). Added 'hardfix' program. Added '!QuickFix'
and '!Intro' files. Modified most of this help file, removed the "Can
a serious filing system corrupt discs?" section that contained only my
(debatable) opinions and added "fsck and Risc PC" section.
1.21 Fixed some minor bug and added some error trapping. Added and
documented a sensible return code and the system variable
fsck$ReturnCode. Fixed some bugs in the directory relinking feature.
1.22 Fixed bug that caused problems when relinking directories that share
sectors with other files to relink. Fixed problems related to non-ADFS
partitions. Fixed a bug that caused wrong IDs to be relinked in very
infrequent cases. Removed the limit on the number of IDs to relink
(ie. no more "Too many IDs to relink" errors).
Thanks go to:
-------------
- Keith Bailey who discovered that the first 3 versions of fsck were
completely useless on his SCSI!! The 4th version finally fixed his
map problems (twice!). Thanks for the comment about the clock too! :-)
- Adam Goodfellow and Atle Mjelde Baardholt for the beta-testing.
- Hans Ole Rafaelsen who tried fsck on 1.6Mb floppies.
- Julian Wright for his beta-testing, suggestions, PRM docs, bugs-report and
interest.
- Ernest Ong who suggested me to write a map-corruptor program to test fsck:
'eliminate' is ready, now I am working on 'corrupter' ;-)
- Cristian Ghezzi who let me play with his RISCiX partitioned SCSI for a
whole day to discover some stupid fsck bug. He also let me intentionally
corrupt his ST506 disc to test the new directory recognition feature...
- Andreas Schubert (Platon) who tried fsck on his Risc PC.
- Kai Schlichting who said that fsck was one of the most useful 'Unix ports'
for RISC OS, a program that the Acorn world really needed. Kai has been
the first who sent me 'something' to register!
- Mike Henry who has been the first who sent me some pounds to register
(actually he sent me 10 pounds instead of the 5 I ask!).
- Dag Haakon Myrdal for his suggestions and accurate bug report.
- Martin J. Ebourne for his (initially negative but now generally positive)
comments and support.
- Simon Middleton who pushed me to finish the new version (1.20) so that he
could include it in his PD/ShareWare CD-ROM.
- Jason Williams (and all the other collaborators) for DeskLib: the new
versions of fsck use some small part of DeskLib and the new sources
structure is really similar to DeskLib's one.
- the person who spread on Internet a document describing the E-Format
structure.
- Mohsen Alshayef for his !ArcTools, a very useful utility that allowed
me to search in the ROM FileCore module for some code...
Conditions of use
-----------------
fsck can only be distributed with the complete fsck suite.
Read the !SHAREWARE file for the conditions of use and distribution of the
whole package.
I can be contacted at the following address:
Sergio Monesi
Via Trento e Trieste 30
20046 Biassono (MI)
Italy
E-mail address:
pel0015@cdc8g5.cdc.polimi.it
If you don't receive a reply (or if the message is bounced) I can also be
contacted at:
sergio@freebsd.first.gmd.de
or:
sergio@phantom.com
WWW:
http://cdc8g5.cdc.polimi.it/~pel0015/